/**
 * 全局 == 自定义hooks函数（本质上就是一个普通函数） ==
 * hooks函数封装：
 * 1. 自定义hooks函数命名：useXXX
 * 2. 函数内：组合式api、生命周期、ajax请求等(注意：defineProps、defineEmits等只能在setup中使用宏函数除外)
 * 3. 返回需要对外暴露数据和函数（按需）
 * 注意：不能使用defineProps等全局宏函数
 */
import { getDoctorPage, followDoctor } from '@/api/consult'
import { ref, onMounted } from 'vue'
import type { DoctorList, FollowType } from '@/types/consult'
import { getPrescriptionPic } from '@/api/consult'
import { showImagePreview } from 'vant'
import type { OrderDetail } from '@/types/medicine'
import { useRoute } from 'vue-router'
import { getMedicalOrderDetail } from '@/api/medicine'

/**
 * 获取药品订单详情
 */
export const useOrderDetail = () => {
  const route = useRoute()
  const order = ref<OrderDetail>()
  const getOrder = async () => {
    const res = await getMedicalOrderDetail(route.query.orderId as string)
    console.log('药品订单详情：', res)
    order.value = res
  }
  onMounted(() => {
    getOrder()
  })

  return { order, getOrder }
}

/**
 * 获取关注医生列表钩子函数
 * @returns
 */
export const useDocList = () => {
  const docList = ref<DoctorList>([])
  const getDocList = async () => {
    const res = await getDoctorPage({
      current: 1, // 第一页
      pageSize: 5 // 获取5条
    })
    console.log('关注医生列表：', res.rows)
    docList.value = res.rows
  }
  onMounted(() => {
    getDocList()
  })

  return { docList, getDocList }
}
/**
 * 关注一个医生或一个文章
 * @returns
 * type: doc 代表关注医生 ｜ knowledge 代表关注文章
 */
export const useFollow = (type: FollowType) => {
  const loading = ref(false)
  // 说明：类型定义公共部分
  const follow = async (doc: { id: string; likeFlag: 0 | 1 }) => {
    // 发请求之前，开启loading：防止重复点击
    loading.value = true
    try {
      await followDoctor(doc.id, type)
      doc.likeFlag = doc.likeFlag === 1 ? 0 : 1
    } catch (error) {
      console.log('请求失败执行：', error)
    } finally {
      // 无论try代码块中请求成功或失败都会执行
      loading.value = false
    }
  }

  return { loading, follow }
}

/**
 * 查看处方
 * @returns
 */
export const useLook = () => {
  const lookPre = async (id?: string) => {
    if (id) {
      // 1. 调用api获取电子处方单
      const res = await getPrescriptionPic(id)
      console.log('电子处方单：', res)
      // 2. 预览处方单
      showImagePreview([res.url])
    }
  }

  return { lookPre }
}
